#pragma once

//#include <map>
#include <map>
#include <vector>

#include "RelationshipType.h"
#include "RelationshipArgumentType.h"

// RelationshipTable used for easy validation of relationships.
class RelationshipTable {

	public:
		typedef std::pair<RelationshipArgumentType, RelationshipArgumentType> relTypePair;
		RelationshipTable(void);
		~RelationshipTable(void);
		std::pair<relTypePair, bool>  createPair(RelationshipArgumentType, RelationshipArgumentType);
		//std::map<relTypePair, bool> insertToMapGivenLRHS(std::map<relTypePair, bool> map, RelationshipArgumentType lhs[], RelationshipArgumentType rhs[]);
		bool RelationshipTable::initialize(void);
		void insertValidRelationsForType(RelationshipType relationshipType, std::map<relTypePair, bool>);
		bool isValidArgument(RelationshipType, RelationshipArgumentType, RelationshipArgumentType);

	private:
	
		// An array of lists of the valid relationship arguments
		std::map<RelationshipType, std::map<relTypePair, bool>> mValidRelEntryMap;
};

